// DrawRect.cpp: implementation of the CDrawRect class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Vincent.h"
#include "DrawRect.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDrawRect::CDrawRect()
{
	m_rect.top = 0;
	m_rect.left = 0;
	m_rect.right = 0;
	m_rect.bottom = 0;
}

CDrawRect::~CDrawRect()
{

}

void CDrawRect::Draw(CDC *pDC)
{
	// 펜을 새로 만든다.
	CPen pPen(PS_SOLID, m_nPenWidth, m_rgbForeground);
	CPen* pOldPen = pDC->SelectObject(&pPen);
	
	// 배경색으로 브러쉬를 새로 만든다.
	CBrush myBrush, *pOldBrush;
	myBrush.CreateSolidBrush(m_rgbBackground);
	
	// 색칠을 해야하는지 체크하고, 브러쉬를 선택한다.
	if (m_bFillOut)
		pOldBrush = (CBrush*)pDC->SelectObject(&myBrush);
	else
		pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	
	// 사각형을 그린다.
	pDC->Rectangle(&m_rect);
	
	// 펜을 복구한다.
	pDC->SelectObject(pOldPen);
	
	// 브러쉬를 복구한다.
	pDC->SelectObject(pOldBrush);
}

void CDrawRect::OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, CPoint scrolled)
{
	// 시작점과 끝점을 클릭한 곳으로 한다.
	m_rect.left = m_rect.right = point.x;
	m_rect.top = m_rect.bottom = point.y;
}

void CDrawRect::OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, CPoint scrolled)
{
	Draw(pDC);			// 사각형을 마지막으로 그리고,
	
	m_rect.left += scrolled.x;	// 스크롤바 위치만큼 더해준다.
	m_rect.right += scrolled.x;
	m_rect.top += scrolled.y;
	m_rect.bottom += scrolled.y;
	
	// 혹시, 그려질 수 없는 상황이면, 완료가 아님!
	if (m_rect.left == m_rect.right || m_rect.top == m_rect.bottom)
		return;
	
	m_bComplete = true;	// 완료상태로 설정한다.
}

void CDrawRect::OnMouseMove(CDC *pDC, UINT nFlags, CPoint point, CPoint scrolled)
{
	if (nFlags & MK_LBUTTON)
	{
		// 래스터 오퍼레이션을 R2_NOTXORPEN으로 설정
		pDC->SetROP2(R2_NOTXORPEN);
		
		// 펜을 새로 만든다.
		CPen pPen(PS_SOLID, m_nPenWidth, m_rgbForeground);
		CPen* pOldPen = pDC->SelectObject(&pPen);
		
		// 배경색으로 브러쉬를 새로 만든다.
		CBrush myBrush, *pOldBrush;
		myBrush.CreateSolidBrush(m_rgbBackground);
		
		// 색칠을 해야하는지 체크하고, 브러쉬를 선택한다.
		if (m_bFillOut)
			pOldBrush = (CBrush*)pDC->SelectObject(&myBrush);
		else
			pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
		
		// 전에 그려진 사각형을 지운다.
		pDC->Rectangle(&m_rect);
		
		// 마지막 점을 바꾸고,
		m_rect.right = point.x;
		m_rect.bottom = point.y;
		
		// 사각형을 새로 그린다.
		pDC->Rectangle(&m_rect);
		
		// 펜을 복구한다.
		pDC->SelectObject(pOldPen);
		
		// 브러쉬를 복구한다.
		pDC->SelectObject(pOldBrush);
	}
}
